home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet internetowy / Rozne / HTTrack 3.40-2 / httrack-3.40-2.exe / {app} / src / proxy / main.c < prev    next >
C/C++ Source or Header  |  2006-04-09  |  5KB  |  165 lines

  1. /* ------------------------------------------------------------ */
  2. /*
  3. HTTrack Website Copier, Offline Browser for Windows and Unix
  4. Copyright (C) Xavier Roche and other contributors
  5.  
  6. This program is free software; you can redistribute it and/or
  7. modify it under the terms of the GNU General Public License
  8. as published by the Free Software Foundation; either version 2
  9. of the License, or any later version.
  10.  
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with this program; if not, write to the Free Software
  18. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  19.  
  20. Please visit our Website: http://www.httrack.com
  21. */
  22.  
  23. /* ------------------------------------------------------------ */
  24. /* File: ProxyTrack, httrack cache-based proxy                  */
  25. /* Author: Xavier Roche                                         */
  26. /* ------------------------------------------------------------ */
  27.  
  28. /* Standard includes */
  29. #include <stdio.h>
  30. #include <stdlib.h>
  31. #include <string.h>
  32. #include <time.h>
  33. #include <ctype.h>
  34.  
  35. #include "htsbase.h"
  36. #include "htsnet.h"
  37. #include "htslib.h"
  38. #include "store.h"
  39. #include "proxytrack.h"
  40.  
  41. #ifndef _WIN32
  42. #include <signal.h>
  43. static void sig_brpipe( int code ) {
  44.   /* ignore */
  45. }
  46. #endif
  47.  
  48. static int scanHostPort(const char* str, char *host, int *port) {
  49.     char* pos = strrchr(str, ':');
  50.     if (pos != NULL) {
  51.         int n = (int) ( pos - str );
  52.         if (n < 256) {
  53.             host[0] = '\0';
  54.             strncat(host, str, n);
  55.             if (sscanf(pos + 1, "%d", port) == 1) {
  56.                 return 1;
  57.             }
  58.         }
  59.     }
  60.     return 0;
  61. }
  62.  
  63. int main(int argc, char* argv[])
  64. {
  65.   int i;
  66.   int ret = 0;
  67.     int proxyPort, icpPort;
  68.     char proxyAddr[256 + 1], icpAddr[256 + 1];
  69.     PT_Indexes index;
  70.  
  71. #ifdef _WIN32
  72.   {
  73.     WORD   wVersionRequested;   // requested version WinSock API
  74.     WSADATA wsadata;            // Windows Sockets API data
  75.     int stat;
  76.     wVersionRequested = 0x0101;
  77.     stat = WSAStartup( wVersionRequested, &wsadata );
  78.     if (stat != 0) {
  79.       fprintf(stderr, "Winsock not found!\n");
  80.       return -1;
  81.     } else if (LOBYTE(wsadata.wVersion) != 1  && HIBYTE(wsadata.wVersion) != 1) {
  82.       fprintf(stderr, "WINSOCK.DLL does not support version 1.1\n");
  83.       WSACleanup();
  84.       return -1;
  85.     }
  86.   }
  87. #endif
  88.  
  89.     /* Args */
  90.     printf("ProxyTrack %s, build proxies upon HTTrack Website Copier Archives\n", PROXYTRACK_VERSION);
  91.     printf("Copyright (C) Xavier Roche and other contributors\n");
  92.     printf("\n");
  93.     printf("This program is free software; you can redistribute it and/or\n");
  94.     printf("modify it under the terms of the GNU General Public License\n");
  95.     printf("as published by the Free Software Foundation; either version 2\n");
  96.     printf("of the License, or any later version.\n");
  97.     printf("\n");
  98.     printf("*** This version is a development release ***\n");
  99.     printf("\n");
  100.     if (argc < 3
  101.         || !scanHostPort(argv[1], proxyAddr, &proxyPort)
  102.         || !scanHostPort(argv[2], icpAddr, &icpPort)) 
  103.     {
  104.         fprintf(stderr, "usage: %s <proxy-addr:proxy-port> <ICP-addr:ICP-port> [ ( <new.zip path> | <new.ndx path> | --list <file-list> ) ..]\n", argv[0]);
  105.         fprintf(stderr, "\texample:%s proxy:8080 localhost:3130 /home/archives/www-archive-01.zip /home/old-archives/www-archive-02.ndx\n", argv[0]);
  106.     return 1;
  107.   }
  108.     index = PT_New();
  109.     for(i = 3 ; i < argc ; i++) {
  110.         if (argv[i][0] == '-') {
  111.             if (strcmp(argv[i], "--list") == 0) {
  112.                 if (i + 1 < argc) {
  113.                     char line[256 + 1];
  114.                     FILE *fp = fopen(argv[++i], "rb");
  115.                     if (fp == NULL) {
  116.                         fprintf(stderr, "error: could not process list %s\n", argv[i]);
  117.                         exit(1);
  118.                     }
  119.                     while(linput(fp, line, 256)) {
  120.                         int itemsAdded = PT_AddIndex(index, line);
  121.                         if (itemsAdded > 0) {
  122.                             fprintf(stderr, "processed: %s (%d items added)\n", line, itemsAdded);
  123.                         } else if (itemsAdded == 0) {
  124.                             fprintf(stderr, "processed: %s (no items added)\n", line);
  125.                         } else {
  126.                             fprintf(stderr, "error: could not process %s\n", line);
  127.                         }
  128.                     }
  129.                     fclose(fp);
  130.                 }
  131.             } else {
  132.                 fprintf(stderr, "* bad arg %s\n", argv[i]);
  133.                 exit(1);
  134.             }
  135.         } else {
  136.             int itemsAdded = PT_AddIndex(index, argv[i]);
  137.             if (itemsAdded > 0) {
  138.                 fprintf(stderr, "processed: %s (%d items added)\n", argv[i], itemsAdded);
  139.             } else if (itemsAdded == 0) {
  140.                 fprintf(stderr, "processed: %s (no items added)\n", argv[i]);
  141.             } else {
  142.                 fprintf(stderr, "error: could not process %s\n", argv[i]);
  143.             }
  144.         }
  145.     }
  146.  
  147.     /* sigpipe */
  148. #ifndef _WIN32
  149.   signal( SIGPIPE , sig_brpipe );   // broken pipe (write into non-opened socket)
  150. #endif
  151.  
  152.   /* Go */
  153.   ret = proxytrack_main(proxyAddr, proxyPort, icpAddr, icpPort, index);
  154.  
  155.     /* Wipe */
  156.     PT_Delete(index);
  157.  
  158. #ifdef _WIN32
  159.   WSACleanup();
  160. #endif
  161.  
  162.   return ret;
  163. }
  164.  
  165.